\subsection{User requirements}
At the beginning of our planning we recognised the following User Requirements that were classified as necessary for a satisfactory usage of the system. All of these features were successfully implemented:

\begin{itemize}
\item The user should be able to create a profile and specify their interests along with a ranking of the importance of each interest. We then decided that providing a ranking would be redundant and hinder the user experience thus we did not implement it.
\item The system should keep a static and a dynamic profile of each user. The dynamic profile will change according to the feedback received from the user.
\item The system should make use of the semantic information of semantically tagged data stores such as DBpedia, to recommend Wikipedia articles to the users based on their profile.
\item The recommender should be community-driven. Each user will be able to authenticate into the system using a username and password.
\item A GUI capable of showing the recommendations in an easy-to-comprehend manner, as well as providing the user with tools to view and edit their profile.
\item A feedback module allowing the user to \textit{``like"} a recommended page. The feedback will then be taken into account to improve future recommendations. 
\item Each user will be able to add friends to their profile, thus building up a network. The system will then be able to recommend articles based on what the user's friends like.
\item The system will also be able to recommend articles based on the likeness of the user's profile with other users, not necessary friends in the network. 
\end{itemize}

\subsection{Extensions}
The following is a list of additional features and requirements that were to be implemented additionally, if the time would permit it. That status of each of these features is shown in bold characters.
\\
\begin{itemize}
\item The system could integrate with Facebook via the Facebook API and gather key information about the user's network. That would help the user discover which of their Facebook friends use iSquirrel. \textbf{[done]}
\item The system could be extended to recommend books, music and movies by using sources such as  Amazon, Last.fm and IMDB and their APIs respectively. \textbf{[Last.fm done]}
\item Along with a list of recommendations, the system could provide a ``Shuffle'' button giving the ability to the user to navigate to a random page (always in the lines of their profile and interests). \textbf{[done]}
\item Using the community, the system can recommend friends to the user based on how close their profiles are.\textbf{[done]}
\item Provide a function for the users to compare their profile with random people in the network. That will allow the users to find people with common interests, befriend them, and thus enjoy a larger recommendation range.\textbf{[done]}
\end{itemize}

\subsection{Additional extensions}

The following features were not planned from the beginning but were added in the development phase. All of these features were completed and included in the final version.

\begin{itemize}
\item Ability to recommend YouTube videos based on the user's profile information. See Section \ref{sec:networkrecs} for more details.
\item Cross-Browser bookmarklet for quick marking of \emph{``liked"} pages. See Section \ref{sec:bookmarklet} for more details.
\end{itemize}

\subsection{Iterations}

``\emph{Software is more like gardening - it is more organic than concrete. You plant many things in a garden according to an initial plan and conditions. Some thrive, others are destined to end up as compost. You may move plantings relative to each other to take advantage of the interplay of light and shadow, wind and rain. Overgrown plants get split or pruned, and colours that clash may get moved to more aesthetically pleasing locations. You pull weeds, and you fertilise plantings that are in need of some extra help. You constantly monitor the health of the garden, and make adjustments (to the soil, the plants, the layout) as needed.}"~\cite{PragmProg}

The requirements of a software engineering project change over time. To manage with these changes we split the development process into 4 iterations. Each iteration was planned during the sprint meeting. There, the change of requirements were  considered and redefined and the development phase of each iteration was decided. The team made big efforts to implement all the planned features but of course, this wasn't always possible. Below follows an overview of what was done on each iteration.

\subsubsection{Iteration 1 (23/10 - 02/11)}

\begin{itemize}
\item Setup of Tomcat server for JSP.
\item Setup of Eclipse IDE and PostgreSQL Server on each of our machines.
\item Configuration of Hibernate for Java.
\item Initial model design and first implementation of the User's Profile.
\item Skeleton implementation of the GUI of the system.
\item Complete implementation of the user registration and authentication system.
\item First simple version of the ``Add Interest" feature.
\end{itemize}

\subsubsection{Iteration 2 (02/11 - 13/11)}
\begin{itemize}
\item Implemented the MVC\footnote{Model-View-Controller Design Pattern} pattern.
\item Use of Facebook API to find facebook friends. Integration with GUI and user registration.
\item Integration of DBpedia API and first fetching of DBpedia recommendations from user interests (Static Recommender).
\item Developed the cross-browser bookmarklet.
\item Ability to \emph{``like"} a Wikipedia page and update the user's profile.
\item Edit Profile page created.
\item First version of friend's search.
\item Configuration of testing database (for JUnit tests).
\end{itemize}

\subsubsection{Iteration 3 (13/11 - 24/11)}
\begin{itemize}
\item Dynamic Recommender: use dynamic profile information to query for new recommendations.
\item Implementation of the Profile Comparison algorithm.
\item Used the YouTube API to recommend videos from the user interests
\item Used the Last.fm API to recommend music artists from user interests and random keywords (from dynamic profile).
\item UI refactoring and introduction of AJAX in the client side interface.
\item Display of recommendations to the user.
\item Improved version of friend's search (search includes interests).
\end{itemize}

\subsubsection{Iteration 4 (24/11 - 07/12)}
\begin{itemize}
\item Network Recommendation algorithm developed.
\item ``What your friends like" and ``What other people like" recommendations.
\item ``Suggest a friend" using the Profile Comparison algorithm.
\item Improved display of recommendations and addition of the ``i like it" button. (Feedback Module)
\item Finalised UI version with smoother navigation (visual effects).
\item Multi-threading implementation and optimisation of remote queries (DBpedia, YouTube, Last.fm)
\item Improved ``Add Interest" page by showing description of the interest.
\end{itemize}
